本文將分幾個部分,介紹基本的計算攝影學的理論,準確地來說,會介紹如何用數學的方式表達從 3D 空間中的物體到圖片中的過程(以下稱作為投影),並且描述不同相機位置的關係。這裡會用到一點線性代數,因為我們可以很方便的使用矩陣來表達相機的參數和計算。
常用的一種簡化相機模型稱作:針孔相機(Pinhole camera)基本上就是一個透視投影(perspective projection)的過程,如下圖,
拿上圖為例,給定目標物體的高度 x 、深度 z 和焦距 f,我們可以透過相似三角形計算出目標在平面上的位置 ,如下圖所示:
實際上我們的空間是 3D 的,可以用 $(x, y, z)$ 表示,而經投影後是一個 2D 的平面上的座標 $(u, v)$,可以理解為圖片中的某個像素的座標,而相機焦距也可以用分別在 x軸和 y 軸方向上的焦距 $(f_x, f_y)$,我們可以用這個公式表達:
這裡有一個假設:相機的中心位置在 (0, 0, 0) 的位置,也就是說我們假設投影後的圖片中心也會在 (u = 0, v= 0)的位置,也就是圖片的正中心,並且圖片中心的右上會是(u, v)會是正值,反之左下角(u, v)會是負的。然而一般來說我們在表達圖片上的座標時,(u, v)都會是正的,因此我們要做一個簡單的位移,這裡引入一個參數 $(c_x, c_y)$ 作為圖片中心的 2D 位置 ,剛剛的公式就會變為:
下圖表示這個圖片中心的位移:
補充說明:這裡的定義在有些套件上會不太一樣,我們這裡定義 (u=0, v=0)為圖片的左上角,而 (u =width, v = height)為圖片的右下角,而在有些系統中 (例如 OpenGL) (u=0, v=0)為圖片的左下角,因此要在y軸上做一個反轉。
以矩陣表達就是: